/*
    GNU GENERAL PUBLIC LICENSE
    Copyright (C) 2006 The Lobo Project

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public
    License as published by the Free Software Foundation; either
    verion 2 of the License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    General Public License for more details.

    You should have received a copy of the GNU General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

    Contact info: lobochief@users.sourceforge.net
*/
package org.lobobrowser.gui;

import java.util.*;

import org.lobobrowser.ua.*;

/**
 * Factory used to create browser windows. It is used
 * when the JavaScript method Window.open() is invoked,
 * for example.
 * @see NavigatorWindowImpl#setWindowFactory(WindowFactory)
 */
public interface WindowFactory {
	/**
	 * Creates a new navigator window, even if the windowId provided exists.
	 * The implementation of this method is expected to add the top frame
	 * of the window context to the new navigator window.
	 * @param windowId The window ID. It may be <code>null</code>. 
	 * @param windowProperties Window properties, following Window.open() conventions.
	 *                         In addition, properties <code>title</code> and
	 *                         <code>icon</code> should be supported.
	 * @see DefaultBrowserWindow
	 */
	public AbstractBrowserWindow createWindow(String windowId, Properties windowProperties, NavigatorWindow windowContext);	
	
	/**
	 * Gets an existing window given a windowId.
	 */
	public AbstractBrowserWindow getExistingWindow(String windowId);
	
	public void overrideProperties(AbstractBrowserWindow window, Properties properties);
}
